【抓图功能】利用java内置摄像机功能进行rtsp流截帧取流图片 |
您所在的位置:网站首页 › nodejs视频流 省流 › 【抓图功能】利用java内置摄像机功能进行rtsp流截帧取流图片 |
前言
目前有一个需求,需要从第三方平台的rtsp视频流里抓取图片,进行其他的AI识别操作。一般像主流视频平台大华、海康都会有抓图API接口提供,但有个别厂商不提供(可能是为了省资源…)所以只能自己搭建一个抓图API服务了,其实难也不难主要是要有思路。 FFmpegFrameGrabber找到了这个构造函数 位于 org.bytedeco.javacv下 构造函数的作用是构造一个视频帧抓取器对象,并打开一个视频文件或流,以便读取其中的视频帧数据 这个可以实现我们需要的功能 引入pom依赖包 org.bytedeco javacv 1.4.1 实现代码 package com.example.demo.util; import org.bytedeco.javacv.*; import org.bytedeco.javacpp.opencv_core; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; /** * Rtsp抓图API * * @author lxl * @date 2023/5/29 */ public class CameraSnatchApi { public static void rtspToImg(String file) throws IOException{ // file 即rtsp流 FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(file); grabber.setOption("rtsp_transport", "tcp"); grabber.setImageWidth(1280); grabber.setImageHeight(720); grabber.start(); //1.创建摄像机对象 -> 播放视频 CanvasFrame canvasFrame = new CanvasFrame("初始化摄像机"); canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); canvasFrame.setAlwaysOnTop(true); OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat(); //2.截帧取流图 File optPut = new File("D:\\work\\test\\ops\\"+ System.currentTimeMillis() + ".jpeg"); while (true) { Frame frame = grabber.grabImage(); if (frame != null) { // 3.输出图片流 ImageIO.write(FrameToBufferedImage(frame), "jpeg", optPut); } } } /** * BufferedImage对象 */ public static BufferedImage FrameToBufferedImage(Frame frame) { Java2DFrameConverter converter = new Java2DFrameConverter(); BufferedImage bufferedImage = converter.getBufferedImage(frame); return bufferedImage; } } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |